/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package br.inf.ufg.model;

import br.inf.ufg.factory.ConexaoFactoryMySql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author umarley.faria
 */
public class LocalDAO {
    
    
    private Connection con;
    private Statement stmt;
    private Statement stmtNavegar;
    private ResultSet rsNavegar;
    
    public LocalDAO() throws ClassNotFoundException, SQLException{        
         
             con = ConexaoFactoryMySql.getConnection();
             stmt = con.createStatement();
             stmtNavegar = con.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE,
                     ResultSet.CONCUR_UPDATABLE );
             rsNavegar = stmtNavegar.executeQuery( "select * from LOCAL" );        
    
    }
    
    
    public Local primeiro() throws SQLException {
        
            if (rsNavegar.first() ) {            
                Local local = new Local();
                local.setIdLocal(rsNavegar.getInt( "IDLOCAL" ) );
                local.setNome(rsNavegar.getString( "NOME" ) );
                local.setCapacidade(rsNavegar.getInt("CAPACIDADE" ) );
                local.setCep(rsNavegar.getString( "CEP" ) );
                local.setRua(rsNavegar.getString( "RUA" ) );
                local.setComplemento(rsNavegar.getString( "COMPLEMENTO" ) );
                local.setBairro(rsNavegar.getString( "BAIRRO" ) );
                local.setCidade(rsNavegar.getString( "CIDADE" ) );
                local.setEstado(rsNavegar.getString( "ESTADO" ) );
                
                return local;
                
            } else {
                return null;
            }
        
    }
    
    public Local anterior() throws SQLException {
        
            if ( ! rsNavegar.isFirst() ) {
                rsNavegar.previous();
                Local local = new Local();
                local.setIdLocal(rsNavegar.getInt( "IDLOCAL" ) );
                local.setNome(rsNavegar.getString( "NOME" ) );
                local.setCapacidade(rsNavegar.getInt("CAPACIDADE" ) );
                local.setCep(rsNavegar.getString( "CEP" ) );
                local.setRua(rsNavegar.getString( "RUA" ) );
                local.setComplemento(rsNavegar.getString( "COMPLEMENTO" ) );
                local.setBairro(rsNavegar.getString( "BAIRRO" ) );
                local.setCidade(rsNavegar.getString( "CIDADE" ) );
                local.setEstado(rsNavegar.getString( "ESTADO" ) );
                
                return local;
                
            } else {
                return null;
            }
        
    }
    
    
    public Local proximo() throws SQLException {
        
            if ( ! rsNavegar.isLast() ) { 
                rsNavegar.next();                
                Local local = new Local();
                local.setIdLocal(rsNavegar.getInt( "IDLOCAL" ) );
                local.setNome(rsNavegar.getString( "NOME" ) );
                local.setCapacidade(rsNavegar.getInt("CAPACIDADE" ) );
                local.setCep(rsNavegar.getString( "CEP" ) );
                local.setRua(rsNavegar.getString( "RUA" ) );
                local.setComplemento(rsNavegar.getString( "COMPLEMENTO" ) );
                local.setBairro(rsNavegar.getString( "BAIRRO" ) );
                local.setCidade(rsNavegar.getString( "CIDADE" ) );
                local.setEstado(rsNavegar.getString( "ESTADO" ) );
                
                return local;
                
            } else {
                return null;
            }       
     }

     
     
      public Local ultimo() throws SQLException {
        
            if ( rsNavegar.last() ) {               
                Local local = new Local();
                local.setIdLocal(rsNavegar.getInt( "IDLOCAL" ) );
                local.setNome(rsNavegar.getString( "NOME" ) );
                local.setCapacidade(rsNavegar.getInt("CAPACIDADE" ) );
                local.setCep(rsNavegar.getString( "CEP" ) );
                local.setRua(rsNavegar.getString( "RUA" ) );
                local.setComplemento(rsNavegar.getString( "COMPLEMENTO" ) );
                local.setBairro(rsNavegar.getString( "BAIRRO" ) );
                local.setCidade(rsNavegar.getString( "CIDADE" ) );
                local.setEstado(rsNavegar.getString( "ESTADO" ) );
                
                return local;                 
            } else {
                return null;
            }  
            
      }
    
    public  List<Local> montarListaLocal() throws SQLException {          
          
            ArrayList<Local> lista = new ArrayList<Local>();       
        
            ResultSet rsLocal = stmt.executeQuery( "SELECT IDLOCAL, NOME FROM `local` " );

            while ( rsLocal.next() ) {
                Local local = new Local();
                local.setIdLocal(rsLocal.getInt("IDLOCAL"));
                local.setNome(rsLocal.getString("NOME"));
                lista.add( local );
            }
            
            return lista;
        
        
      }
    
    public int getCodLocalByNome( String nomeLocal) throws SQLException{
        
        
            ResultSet rsLocal = stmt.executeQuery( "SELECT  IDLOCAL FROM `local` WHERE NOME = '"+ nomeLocal + "'");
            
            if ( rsLocal.next() ) {
                return rsLocal.getInt( "IDLOCAL" );                
            } else {
                return -1;
            }
        
    }
    
    
     public Local getLocalByCod( int cod) throws SQLException{
        
        
            ResultSet rsLocal = stmt.executeQuery( "SELECT  * FROM `local` WHERE IDLOCAL = '"+ cod + "'");
            
            if ( rsLocal.next() ) {
                Local local = new Local();
                  local.setIdLocal(rsLocal.getInt("IDLOCAL"));
                  local.setNome(rsLocal.getString("NOME"));
                  local.setCapacidade(rsLocal.getInt("CAPACIDADE"));
                  local.setCep(rsLocal.getString("CEP"));
                  local.setRua(rsLocal.getString("RUA"));
                  local.setComplemento(rsLocal.getString("COMPLEMENTO"));
                  local.setBairro(rsLocal.getString("BAIRRO"));
                  local.setCidade(rsLocal.getString("CIDADE"));
                  local.setEstado(rsLocal.getString("ESTADO"));
                  return local;                                 
            } else {
                return null;
            }
        
    }
    
    public String getNomeLocalByCod( int cod) throws SQLException{
        
        
            ResultSet rsLocal = stmt.executeQuery( "SELECT  NOME FROM `local` WHERE IDLOCAL = '"+ cod + "'" );
            
            if ( rsLocal.next() ) {
                return rsLocal.getString( "NOME" );                
            } else {
                return "";
            }
        
    }
    
    
    
          
      public Local pesquisarLocal( String param ) throws SQLException{               

                ResultSet rs = stmt.executeQuery( "SELECT * FROM local WHERE NOME LIKE '%"+ param +"%'" );
                
              
              if ( rs.next() ) {      
                  Local local = new Local();
                  local.setIdLocal(rs.getInt("IDLOCAL"));
                  local.setNome(rs.getString("NOME"));
                  local.setCapacidade(rs.getInt("CAPACIDADE"));
                  local.setCep(rs.getString("CEP"));
                  local.setRua(rs.getString("RUA"));
                  local.setComplemento(rs.getString("COMPLEMENTO"));
                  local.setBairro(rs.getString("BAIRRO"));
                  local.setCidade(rs.getString("CIDADE"));
                  local.setEstado(rs.getString("ESTADO"));
                  return local;                      
              } else {
                  return null;
              } 
      }
      
      
      
       public boolean excluirRegistro( Local local ) throws SQLException {
      
            stmt.executeUpdate( "DELETE FROM local WHERE IDLOCAL = " + local.getIdLocal());
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM local" );
            return true;        
      }
      
      public boolean salvarRegistro( Local local ) throws SQLException, Exception{
          
         // int cod = assento.getIdTipo();
          String nome = local.getNome();
          int capacidade = local.getCapacidade();
          String cep = local.getCep();
          String rua = local.getRua();
          String complemento = local.getComplemento();
          String bairro = local.getBairro();
          String cidade = local.getCidade();
          String estado = local.getEstado();
        try {
            stmt.executeUpdate( "INSERT INTO `local` (`NOME`,`CAPACIDADE`,"
                    + "`CEP`,`RUA`,`COMPLEMENTO`,`BAIRRO`,`CIDADE`,`ESTADO`)"
                    + " VALUES ('"+ nome +"','"+ capacidade +"','"+ cep +"','"+ 
                    rua +"','"+ complemento +"','"+ bairro +"','"+ cidade 
                    +"','"+ estado +"')");
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM local" );
            return true;
            
        } catch ( SQLException e) {
            throw new Exception("Erro ao inserir dados. Tente novamente " + e.getMessage());
            
        }
          
      }
      
      
      public boolean atualizarRegistro( Local local ) throws SQLException, Exception{
          
          int cod = local.getIdLocal();
          String nome = local.getNome();
          int capacidade = local.getCapacidade();
          String cep = local.getCep();
          String rua = local.getRua();
          String complemento = local.getComplemento();
          String bairro = local.getBairro();
          String cidade = local.getCidade();
          String estado = local.getEstado();
          
        try {
            stmt.execute("UPDATE local SET NOME = '" + nome + "', CAPACIDADE = '" + capacidade + "',"
                    + "CEP = '" + cep + "', RUA = '" + rua + "',"
                    + "COMPLEMENTO = '" + complemento + "', BAIRRO = '" + bairro + "',"
                    + "CIDADE = '" + cidade + "', ESTADO = '" + estado + "'"
                    + " WHERE IDLOCAL = " + cod);
            rsNavegar = stmtNavegar.executeQuery( "SELECT * FROM local" );
            return true;
            
        } catch ( SQLException e) {
            throw new Exception("Erro ao atualizar dados. Tente novamente " + e.getMessage());
            
        }
          
      }
    
    
    
}
